#include <stdio.h>
#include <string.h>
#include "TDA_diccionario.h"
#include "Lista.h"


int TDiccionaro_Crear(TDiccionario* td){
    L_Crear(td,sizeof(TElementoDiccionario));
    return 0;
}

int TDiccionario_Destruir(TDiccionario* td){
    if(!L_Vacia(*td)){
       TElementoDiccionario Elemento;
       L_Mover_Cte(td,L_Primero);
       do{
          L_Elem_Cte(*td,&Elemento);
          free(Elemento.clave);
          free(Elemento.valor);
       }while(L_Mover_Cte(td,L_Siguiente));
       L_Vaciar(td);
    }
    return 0;
}

int TDiccionario_colocar(TDiccionario* td, char* clave, char* valor){
    TElementoDiccionario Elemento;
    Elemento.clave=(char*)malloc(sizeof(char)*(strlen(clave)+1));
    Elemento.valor=(char*)malloc(sizeof(char)*(strlen(valor)+1));
    strcpy(Elemento.clave,clave);
    strcpy(Elemento.valor,valor);
    return L_Insertar_Cte(td,L_Siguiente,&Elemento);
}

int TDiccionario_obtener(TDiccionario* td, char* clave, char* buffer){
    TElementoDiccionario Elemento;
    int No_Fin_Lista;
    int encontrado=0;
    L_Mover_Cte(td,L_Primero);
    do{
        L_Elem_Cte(*td,&Elemento);
        if(strcmp(Elemento.clave,clave)){
            No_Fin_Lista=L_Mover_Cte(td,L_Siguiente);
        }
        else{
            encontrado=1;
        }
    }while(!encontrado&&No_Fin_Lista);
    strcpy(buffer,Elemento.valor);
    return 0;
}

int TDiccionario_sizeDato(TDiccionario* td, char* clave){
    TElementoDiccionario Elemento;
    int No_Fin_Lista;
    int encontrado=0;
    if(L_Vacia(*td)) return 0;
    L_Mover_Cte(td,L_Primero);
    do{
        L_Elem_Cte(*td,&Elemento);
        if(strcmp(Elemento.clave,clave)){
            No_Fin_Lista=L_Mover_Cte(td,L_Siguiente);
        }
        else{
            encontrado=1;
        }
    }while(!encontrado&&No_Fin_Lista);
    if(!No_Fin_Lista){
        return 0;
    }
    else{
        return (sizeof(char)*(strlen(Elemento.valor)+1));
    }
}
